package rankUtil

import "sync"

//排名池（克隆数据时避免频繁创建排名对象）
var rankPool sync.Pool

//初始排名池大小
const initPoolSize = 10000

func init() {
	//设置排名池创建排名的方法
	rankPool.New = func() interface{} {
		return NewEmptyBaseRankItem()
	}

	//初始化排名池中的排名
	for i := 0; i < initPoolSize; i++ {
		rankPool.Put(NewEmptyBaseRankItem())
	}
}

// 从排名池中获取一个排名对象（该对象会携带之前的数据，需要重置）
// 返回：
//		排名对象（该对象会携带之前的数据，需要重置）
func getRankItemFromPool() *BaseRankItem {
	return rankPool.Get().(*BaseRankItem)
}

// 将复制出来的排名集合放回排名池中（获取排名数据时，不是复制数据不能放回排名池中）
// 参数：
//		items：排名集合
func PutCopyRankItemToPool(items ...*BaseRankItem) {
	for _, item := range items {
		//不是复制数据不放入排名池中，避免获取排行榜排名原数据导致排行榜错乱
		if !item.IsCopy {
			continue
		}

		rankPool.Put(item)
	}
}
